package com.hxkj.dao;

import com.hxkj.domain.po.AuthRole;
import com.hxkj.domain.po.AuthUser;
import com.hxkj.domain.po.AuthUserAgent;
import com.hxkj.domain.po.LinkUser;

import java.util.List;
import java.util.Map;

/**
* 数据操作接口
*
* @author: chenwei
* @version: 1.0
* @datetime: 2018-05-19 11:51:25
*
*/
public interface AuthUserDao {

    /**
    *
    * 根据主键查询AuthUser对象
    *
    * @param userId
    * @return AuthUser对象
    */
    AuthUser get(Long userId) throws Exception;

    /**
    *
    * 根据主键删除AuthUser对象
    *
    * @param userId
    * @return 影响条件数
    */
    int delete(Long userId) throws Exception;

    /**
    *
    * 根据条件删除符合条件的AuthUser对象
    *
    * @param authUser
    * @return 影响条件数
    */
    int delete(AuthUser authUser) throws Exception;

    /**
    *
    * 插入AuthUser对象
    *
    * @param authUser
    * @return 影响条件数
    */
    int save(AuthUser authUser) throws Exception;

    /**
    *
    * 更新AuthUser对象
    *
    * @param authUser
    * @return 影响条件数
    */
    int update(AuthUser authUser) throws Exception;

    /**
     * 查找角色对应的用户
     */

    /**
     * 更新用户
     * @param authUser
     * @return
     * @throws Exception
     */
    public int updateUser(AuthUser authUser) throws Exception;

    /**
     * 通过角色找用户
     * @param role
     * @return
     * @throws Exception
     */
    List<AuthUser> findUserByAuthRole(AuthRole role) throws Exception;

    /**
     * 给用户赋予角色
     */
    void addAuthRoleToUser(Long uid,List<AuthRole> roles) throws Exception;

    /**
     * 删除用户角色
     */
    void deleteAuthRoleByUser(Long uid,List<AuthRole> roles) throws Exception;

    /**
     * 查找用户对应的角色
     */
    List<AuthRole> findAuthRoleByUser(Long userId) throws Exception;

    /**
     * 查询所有关联了角色的用户
     * @return
     */
    List<AuthUser> findRoleUser();

    /**
     * 查询所有未关联任何角色的用户
     * @return
     */
    List<AuthUser> findNoRoleUser(AuthRole role);

    /**
    * @author Mr.zheng
    * @Description getUser 查询所有账号、姓名、备注中包含该字段的用户信息
    * @Date 16:12 2018/5/25
    * @Param [linkUser]
    * @return java.util.List<com.hxkj.domain.po.AuthUser>
    **/
    List<AuthUser> getUser(String keyword);

    /**
     * 超级管理员获取用户信息
     * @param authUser
     * @return
     */
    List<AuthUser> getUserList(AuthUser authUser);

    /**
     * 查询该子站下面的用户
     * @param authUser
     * @return
     */
    List<AuthUser> getUserListAsSite(AuthUser authUser);

    /**
     * 查询用户账户
     * @param authUsers
     * @return
     */
    List<AuthUser> getUserByName(AuthUser authUsers);

    /**
    * @author Mr.zheng
    * @Description getUserByUserId 根据用户ID去获取用户信息
    * @Date 15:54 2018/6/1
    * @Param [userId]
    * @return com.hxkj.domain.po.AuthUser
    **/
    AuthUser getUserByUserId(Long userId);

    /**
     * 根据自媒体角色获取所有的自媒体业务员账号
     * @param authUserAgent
     * @return
     */
    List<AuthUserAgent> getAgentList(AuthUserAgent authUserAgent);

    /**
    * @author Mr.zheng
    * @Description getAuthRoleByUser 根据用户信息去获取角色信息
    * @Date 9:34 2018/6/14
    * @Param [authUser]
    * @return java.util.List<com.hxkj.domain.po.AuthRole>
    **/
    List<AuthRole> getAuthRoleByUser(AuthUser authUser);

    /**
    * @author Mr.zheng
    * @Description getUserPassword 根据用户ID获取用户信息包括密码
    * @Date 16:15 2018/6/26
    * @Param [userId]
    * @return com.hxkj.domain.po.AuthUser
    **/
    AuthUser getUserPassword(Long userId);
}
